Executive summary

U ovoj analizi smo uz pomoć podataka online ankete proveli segmentaciju. Koristeći K-means algoritam smo segmentirali ispitanike u 4 skupine - Rookies, Passivists, Veterans i Addicts. Svaku smo skupinu pobliže opisali te ćemo na temelju dobivenih skupina stvoriti buyer persone. Uz to, vidjeli smo tko su kupci Kiehl’sa, što vole, uz što asociraju Kiehl’s i kako ocijenju kvalitetu Kiehl’s proizvoda i usluga, te smo vidjeli da su spremni i žele koristiti Kiehl’s online trgovinu.

Uvod

Za segmentiranje kupaca koristili smo podatke dobivene online anketom. Anketa je dijeljena putem društvenih mreža kroz razdoblje od tjedan dana (15.03.2018-22.03.2019), te je dostupna na sljedećoj poveznici. Anketa se je sastojala od 54 pitanja, raspoeređenih u 5 sekcija - socijodemografski podatci, osobnost i navike pojedinca, navike u vezi zdravlja kože, mišljenje o Kiehl’s-u te navike u vezi online kupnje skincare proizvoda. Cilj je uz pomoć dobivenih podataka segmentirati kupce na nekoliko klastera iz kojih će se potom formirati buyer persone, prema kojima će se kasnije optimizirati marketinški i komunikacijski planovi.

Analiza podataka ankete

Učitavanje potrebnih paketa za analizu

required_packages <- c(
  "caret",
  "tidyverse",
  "RColorBrewer",
  "knitr",
  "rworldmap",
  "leaflet",
  "plotly"
)

packages_to_install <- required_packages[!(required_packages %in% installed.packages()[,"Package"])]
if(length(packages_to_install)) install.packages(packages_to_install)
suppressMessages(lapply(required_packages, require, character.only = TRUE))

Učitavanje podataka ankete

## Import the data
unzip("Kiehl's survey.csv.zip")
data_raw <- read.csv("Kiehl's survey.csv", stringsAsFactors = FALSE)

## Assign raw data and rename the variables
data <- data_raw
names(data) <- c("time.stamp", "person.gender", "person.age", "person.country", "person.residency", "person.profession",
                 "person.education", "person.income", "person.ethnicity", "person.marital", "person.children",
                 "behave.time.online", "behave.online.buy", "behave.phone.buy", "behave.phone.use",
                 "behave.sociality", "behave.social.nets", "behave.sporty", "behave.environment", "behave.trendy",
                 "behave.skincare.care", "behave.skincare.use", "behave.inform.buy", "behave.expert.recommendations", 
                 "behave.friend.recommendations", "behave.celebrity.recommendation", "behave.where.buy",
                 "skincare.spend", "skincare.brand", "skincare.natural", "skincare.price",
                 "skincare.quality", "skincare.mass.premium", "skincare.social.image", "skincare.service", 
                 "skincare.free.samples", "skincare.returns", "skincare.environment.buy", "kiehls.know", 
                 "kiehls.use", "kiehls.satisfaction", "kiehls.service", "kiehls.recommend", "kiehls.product", 
                 "kiehls.associate", "online.service", "online.why", "online.favorite", "online.satisfaction", 
                 "online.frequency", "online.quantity", "online.time", "online.items", "showroom.webroom", 
                 "use.kiehls")

Opis varijabli

Varijabla Opis
time.stamp Vrijeme ispunjavanja ankete
person.gender Spol ispitanika (M/F)
person.age Dob ispitanika
person.country Država ispitanika
person.residency Područje gdje živi ispitanik
person.profession Zanimanje ispitanika
person.education Postignuta razina obrazovanja ispitanika
person.income Mjesečna primanja ispitanika
person.ethnicity Rasa ispitanika
person.marital Bračno stanje ispitanika
person.children Broj djece ispitanika
behvave.time.online Vrijeme koje ispitanik provodi online (1-10)
behave.online.buy Koliko često ispitanik kupuje online (1-10)
behave.phone.buy Koliko često ispitanik kupuje preko mobilnog uređaja (1-10)
behave.phone.use Koliko ispitanik koristi mobilni uređaj i aplikacije (1-10)
behave.sociality Koliko je ispitanik društvena osoba (1-10)
behave.social.nets Koliko ispitanik koristi društvene mreže (1-10)
behave.sporty Koliko se ispitanik bavi sportom (1-10)
behave.environment Koliko ispitanik brine za zaštitu okoliša i životinja (1-10)
behave.trendy Koliko je ispitanik u trendu (1-10)
behave.skincare.care Koliko ispitanik brine za zdravlje kože (1-10)
behave.skincare.use Da li ispitanik koristi skincare proizvode
behave.inform.buy Koliko se ispitanik informira prije kupnje skincare proizvoda (1-10)
behave.expert.recommendations Koliki utjecaj na ispitanika ima preporuka stručnjaka (1-10)
behave.friend.recommendations Koliki utjecaj na ispitanika ima preporuka prijatelja (1-10)
behave.celebrity.recommendation Koliki utjecaj na ispitanika ima preporuka slavne osobe (1-10)
behave.where.buy Koliko često ispitanik kupuje skincare proizvode online (1-10)
skincare.spend Koliko ispitanik mjesečno troši na skincare proizvode
skincare.brand Koji skincare brend ispitanik koristi
skincare.natural Koliko su ispitaniku važni prirodni sastojci u proizvodu (1-10)
skincare.price Koliko je ispitaniku važna cijena skincare proizvoda (1-10)
skincare.quality Koliko je ispitaniku važna kvaliteta skincare proizvoda (1-10)
skincare.mass.premium Koliko često ispitanik kupuje premium skincare proizvode (1-10)
skincare.social.image Koliko je ispitaniku važna socijalna slika brenda (1-10)
skincare.service Koliko je ispitaniku važna kvaliteta usluge u skincare trgovini (1-10)
skincare.free.samples Koliko su ispitaniku važni besplatni uzorci prije kupnje (1-10)
skincare.returns Koliko je ispitaniku važna mogućnost vraćanja proizvoda (1-10)
skincare.environment.buy Koliko je ispitaniku važna društvena odgovornost brenda prije kupnje (1-10)
kiehls.know Koliko je ispitanik upoznat s brendom Kiehl’s (1-10)
kiehls.use Da li ispitanik koristi Kiehl’s
kiehls.satisfaction Koliko je ispitanik zadovoljan s Kiehl’s proizvodima (1-10)
kiehls.service Koliko je ispitanik zadovoljan s Kiehl’s uslugom (1-10)
kiehls.recommend Koliko ispitanik često preporuča Kiehl’s (1-10)
kiehls.product Koji Kiehl’s proizvod ispitanik koristi
kiehls.associate Uz što ispitanik asocira Kiehl’s
online.service Koji online servis ispitanik koristi za kupnju skincare proizvoda
online.why Zašto ispitanik koristi određeni online servis za kupnju skincare proizvoda
online.favorite Što se ispitaniku posebno sviđa kod tog online servisa
online.satisfaction Koliko je ispitanik zadovoljan svojim online servisom (1-10)
online.frequency Koliko često ispitanik posjećuje online servis (1-10)
online.quantity Koliko skincare proizvoda ispitanik kupuje mjesečno (1-10)
online.time Koliko ispitanik pregledava online servis prije kupnje proizvoda (1-10)
online.items Koliko stvari zajedno u košarici kupuje ispitanik (1-10)
showroom.webroom Gdje sebe na skali showroom-webroom sebe vidi ispitanik (1-10)
use.kiehls Da li bi ispitanik koristio Kiehl’s online servis (1-10)

Eksploracijska analiza podataka

Pregledali smo podatke u vidu osnovnog sažetka te provjerili da li i koliko ima neostajućih vrijednosti u podatcima. U podatcima ima 140 ispitanika koji su pravilno ispunili anketu da nema vrijednosti koje nedostaju (ne uzimajući u obzir informacije o Kiehl’s-u) te ćemo za segmentaciju koristiti samo njih.

summary(mutate_if(data,is.character, as.factor))
                      time.stamp  person.gender person.age
 2019/03/14 10:34:44 PM CET:  1   Female:128    <20  :35  
 2019/03/14 8:23:17 PM CET :  1   Male  : 39    >60  : 5  
 2019/03/15 1:02:57 AM CET :  1                 20-29:86  
 2019/03/15 1:26:36 PM CET :  1                 30-39:29  
 2019/03/15 1:28:07 PM CET :  1                 40-49: 8  
 2019/03/15 1:28:55 AM CET :  1                 50-59: 4  
 (Other)                   :161                           
       person.country   person.residency                person.profession
 USA          :32     Big city  :87      Student                 : 40    
 United States:19     Rural area:17      student                 :  8    
 Canada       : 7     Small town:63      Student                 :  8    
 US           : 7                        Account Manager         :  2    
 Germany      : 5                        Administrative Assistant:  2    
 (Other)      :96                        (Other)                 :106    
 NA's         : 1                        NA's                    :  1    
                        person.education     person.income
 Bachelor's degree or eqvivalent:71      $1000-$1499:17   
 Doctorate degree               : 4      $1500-$3000:20   
 High school graduate           :55      $500-$799  :21   
 Master's degree or eqvivalent  :31      $800-$1000 :16   
 No schooling completed         : 3      <$500      :60   
 Nursery school to 8th grade    : 3      >$3000     :33   
                                                          
           person.ethnicity                         person.marital
 Asian / Pacific   : 17     Married or domestic partnership: 39   
 Black or African  :  9     Separated / Divorced           :  7   
 Hispanic or Latino:  8     Single, never married          :119   
 Other             :  5     Widowed                        :  2   
 White             :128                                           
                                                                  
                                                                  
 person.children behave.time.online behave.online.buy behave.phone.buy
 0 :150          Min.   : 1.000     Min.   : 1.000    Min.   : 1.000  
 1 :  8          1st Qu.: 5.000     1st Qu.: 4.000    1st Qu.: 2.000  
 2 :  7          Median : 7.000     Median : 5.000    Median : 4.000  
 3+:  2          Mean   : 6.868     Mean   : 5.407    Mean   : 4.569  
                 3rd Qu.: 8.000     3rd Qu.: 7.000    3rd Qu.: 7.000  
                 Max.   :10.000     Max.   :10.000    Max.   :10.000  
                                                                      
 behave.phone.use behave.sociality behave.social.nets behave.sporty   
 Min.   : 1.000   Min.   : 1.000   Min.   : 1.000     Min.   : 1.000  
 1st Qu.: 6.000   1st Qu.: 3.500   1st Qu.: 3.000     1st Qu.: 2.000  
 Median : 8.000   Median : 6.000   Median : 6.000     Median : 4.000  
 Mean   : 7.377   Mean   : 5.473   Mean   : 5.599     Mean   : 4.629  
 3rd Qu.: 9.000   3rd Qu.: 7.500   3rd Qu.: 8.000     3rd Qu.: 7.000  
 Max.   :10.000   Max.   :10.000   Max.   :10.000     Max.   :10.000  
                                                                      
 behave.environment behave.trendy    behave.skincare.care
 Min.   : 1.000     Min.   : 1.000   Min.   : 1.00       
 1st Qu.: 7.000     1st Qu.: 3.000   1st Qu.: 5.00       
 Median : 8.000     Median : 5.000   Median : 7.00       
 Mean   : 7.796     Mean   : 4.844   Mean   : 6.88       
 3rd Qu.:10.000     3rd Qu.: 7.000   3rd Qu.: 9.00       
 Max.   :10.000     Max.   :10.000   Max.   :10.00       
                                                         
 behave.skincare.use behave.inform.buy behave.expert.recommendations
 No : 28             Min.   : 1.000    Min.   : 1.000               
 Yes:139             1st Qu.: 6.000    1st Qu.: 5.000               
                     Median : 8.000    Median : 7.000               
                     Mean   : 7.299    Mean   : 6.333               
                     3rd Qu.: 9.000    3rd Qu.: 8.000               
                     Max.   :10.000    Max.   :10.000               
                     NA's   :20        NA's   :20                   
 behave.friend.recommendations behave.celebrity.recommendation
 Min.   : 1.000                Min.   : 1.00                  
 1st Qu.: 4.000                1st Qu.: 1.00                  
 Median : 6.000                Median : 1.00                  
 Mean   : 5.986                Mean   : 2.66                  
 3rd Qu.: 8.000                3rd Qu.: 4.00                  
 Max.   :10.000                Max.   :10.00                  
 NA's   :20                    NA's   :20                     
 behave.where.buy   skincare.spend     skincare.brand skincare.natural
 Min.   : 1.000            :20                : 34    Min.   : 1.000  
 1st Qu.: 1.000   $10-$19  :49     Garnier    :  4    1st Qu.: 4.000  
 Median : 4.000   $100-$199: 1     Nivea      :  4    Median : 6.000  
 Mean   : 4.327   $20-$49  :48     Various    :  3    Mean   : 5.724  
 3rd Qu.: 6.000   $50-$99  :12     Neutrogena :  2    3rd Qu.: 8.000  
 Max.   :10.000   <$10     :36     Olay       :  2    Max.   :10.000  
 NA's   :20       >$200    : 1     (Other)    :118    NA's   :22      
 skincare.price   skincare.quality skincare.mass.premium
 Min.   : 1.000   Min.   : 2.000   Min.   : 1.000       
 1st Qu.: 6.000   1st Qu.: 8.000   1st Qu.: 5.000       
 Median : 8.000   Median :10.000   Median : 5.500       
 Mean   : 7.322   Mean   : 8.815   Mean   : 5.575       
 3rd Qu.: 9.000   3rd Qu.:10.000   3rd Qu.: 6.750       
 Max.   :10.000   Max.   :10.000   Max.   :10.000       
 NA's   :21       NA's   :21       NA's   :21           
 skincare.social.image skincare.service skincare.free.samples
 Min.   : 1.000        Min.   : 1.000   Min.   : 1.000       
 1st Qu.: 1.000        1st Qu.: 2.750   1st Qu.: 2.000       
 Median : 4.000        Median : 5.000   Median : 5.000       
 Mean   : 4.103        Mean   : 4.667   Mean   : 4.973       
 3rd Qu.: 6.750        3rd Qu.: 7.000   3rd Qu.: 7.000       
 Max.   :10.000        Max.   :10.000   Max.   :10.000       
 NA's   :21            NA's   :23       NA's   :21           
 skincare.returns skincare.environment.buy  kiehls.know     kiehls.use
 Min.   : 1.000   Min.   : 1.000           Min.   : 1.000   No :143   
 1st Qu.: 3.000   1st Qu.: 6.000           1st Qu.: 1.000   Yes: 24   
 Median : 5.000   Median : 8.000           Median : 1.000             
 Mean   : 5.207   Mean   : 6.979           Mean   : 3.551             
 3rd Qu.: 8.000   3rd Qu.: 9.000           3rd Qu.: 6.000             
 Max.   :10.000   Max.   :10.000           Max.   :10.000             
 NA's   :22       NA's   :22                                          
 kiehls.satisfaction kiehls.service   kiehls.recommend
 Min.   : 1.000      Min.   : 1.000   Min.   : 1.000  
 1st Qu.: 5.000      1st Qu.: 5.000   1st Qu.: 4.500  
 Median : 7.000      Median : 7.000   Median : 7.000  
 Mean   : 6.774      Mean   : 6.567   Mean   : 6.419  
 3rd Qu.: 8.500      3rd Qu.: 8.000   3rd Qu.: 8.000  
 Max.   :10.000      Max.   :10.000   Max.   :10.000  
 NA's   :136         NA's   :137      NA's   :136     
                            kiehls.product
                                   :145   
 Ultra Facial Cream                :  2   
 ...                               :  1   
 Avocado Eye Cream                 :  1   
 Creamy under eye avocado treatment:  1   
 eyeliner                          :  1   
 (Other)                           : 16   
                                                            kiehls.associate
                                                                    :136    
 Quality                                                            :  5    
 Natural products;Premium products;Quality                          :  3    
 Kiehl's Customer Representatives (store experts in white lab coats):  2    
 Mr. Bones                                                          :  2    
 Premium products;Quality                                           :  2    
 (Other)                                                            : 17    
                            online.service       online.why
                                   :95                :97  
 Amazon                            :16     Convenience: 3  
 Amazon                            : 2     Convenient : 3  
 Sephora                           : 2     Convenient : 2  
 amazon                            : 1     Easy       : 2  
 Amazon and the brandâ\200\231s websites : 1     Easy to use: 2  
 (Other)                           :50     (Other)    :58  
                     online.favorite online.satisfaction online.frequency
                             :101    Min.   : 3.000      Min.   : 1.000  
 Easy                        :  2    1st Qu.: 7.000      1st Qu.: 4.000  
 Fast                        :  2    Median : 8.000      Median : 6.000  
 See above                   :  2    Mean   : 8.289      Mean   : 6.237  
 ...                         :  1    3rd Qu.:10.000      3rd Qu.: 8.000  
 ? didn't i just answer that?:  1    Max.   :10.000      Max.   :10.000  
 (Other)                     : 58    NA's   :91          NA's   :91      
 online.quantity   online.time      online.items    showroom.webroom
 Min.   : 1.000   Min.   : 1.000   Min.   : 1.000   Min.   : 1.000  
 1st Qu.: 1.000   1st Qu.: 4.000   1st Qu.: 2.000   1st Qu.: 4.000  
 Median : 2.000   Median : 6.000   Median : 3.000   Median : 5.000  
 Mean   : 2.844   Mean   : 5.868   Mean   : 3.707   Mean   : 5.423  
 3rd Qu.: 4.000   3rd Qu.: 8.000   3rd Qu.: 5.000   3rd Qu.: 7.000  
 Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :10.000  
 NA's   :90       NA's   :91       NA's   :92       NA's   :89      
   use.kiehls    
 Min.   : 1.000  
 1st Qu.: 1.000  
 Median : 4.000  
 Mean   : 3.904  
 3rd Qu.: 5.000  
 Max.   :10.000  
                 
sum(complete.cases(data))
[1] 21
sum(complete.cases(data[1:40])) ## Complete cases not counting about Kiehl's data
[1] 140

Pregledali smo i osnovna obilježja kompletnog uzoraka, u vidu distribucije po spolu, dobi, primanjima te korištenju skincare proizvoda. Kao što vidimo u uzorku imamo više žena, 128 žena (77%) naspram 39 muškaraca (23%). 35 ispitanika su mlađi od 20 godina (21%), 86 u 20-tim godinama (51%), 29 u 30-tim godinama (17%), te 17 starijih od 40 godina (10%). Nešto više ispitanika ima primanja manja od 500$, dok su ostale skupine ravnomjerno raspoređene. 139 ispitanik (83%) izjavio je da koristi skincare proizvode.

## Data preparation
data1 <- data
data1$person.income <- factor(data1$person.income, 
                           levels=c("<$500", "$500-$799", "$800-$1000", "$1000-$1499", "$1500-$3000", ">$3000"), 
                           ordered=TRUE)
data1$person.age <- factor(data1$person.age, levels=c("<20", "20-29", "30-39", "40-49", "50-59", ">60"), 
                              ordered=TRUE)

## Gender plot
g_summary1 <- ggplot(data1 %>%
                       group_by(person.gender) %>%
                       summarize(n=n())) +
  geom_col(aes(x=person.gender, y=n, fill=person.gender)) +
  labs(x="Spol", y="Broj ispitanika") +
  theme(legend.position="none")

## Age plot
g_summary2 <- ggplot(data1 %>%
                       group_by(person.age) %>%
                       summarize(n=n())) +
  geom_col(aes(x=person.age, y=n, fill=person.age)) +
  labs(x="Godine", y="Broj ispitanika") +
  theme(legend.position="none")

## Income plot
g_summary3 <- ggplot(data1 %>%
                       group_by(person.income) %>%
                       summarize(n=n())) +
  geom_col(aes(x=person.income, y=n, fill=person.income)) +
  labs(x="Mjesečni prihod", y="Broj ispitanika") +
  theme(legend.position="none")

## Skicare use plot
g_summary4 <- ggplot(data1 %>%
                       group_by(behave.skincare.use) %>%
                       summarize(n=n())) +
  geom_col(aes(x=behave.skincare.use, y=n, fill=behave.skincare.use)) +
  labs(x="Korištenje skincare proizvoda", y="Broj ispitanika") +
  theme(legend.position="none")

## Plotting all 4 plots
subplot(ggplotly(g_summary1), ggplotly(g_summary2), ggplotly(g_summary3), ggplotly(g_summary4),nrows=2,
        titleX=TRUE, titleY=TRUE, margin=c(0.04, 0.04, 0.04, 0.18)) %>%
  layout(annotations = list(
    list(x = 0 , y = 1.05, text = "Distribucija ispitanika po spolu", showarrow = F, xref='paper', yref='paper'),
    list(x = 0.77 , y = 1.05, text = "Distribucija ispitanika po dobi", showarrow = F, xref='paper', yref='paper'),
    list(x = 0 , y = 0.48, text = "Distribucija ispitanika po mjesečnom prihodu", showarrow = F, xref='paper', yref='paper'),
    list(x = 0.92 , y = 0.48, text = "Distribucija prema korištenju skincare proizvoda", showarrow = F, xref='paper', yref='paper'))
  )

Pregledali smo i iz kojih područja dolaze ispitanici. Većina ispitanika (71, 43%) dolazi is SAD-a. Ostali ispitanici dolaze iz: Italije, Njemačke, UK, Australije, Nizozemske, Francuske, Rusije, Švedske, Finske, Kanade, Lihtenštajna, Malezije, Novog Zelanda, Irske, Izraela, Hong Konga, Islanda, Austrije, Estonije, Nigerije, Švicareske, Singapura, Filipina, Indije, Belgije, Norveške, Cipra, Španjolske, Portugala, Malte, Kine, JAR, Vijetnama, Irana, Mađarske, Barbadosa, Poljske, Meksika i Argentine.

## cleaning countries variable
data$person.country <- tolower(data$person.country)
data$person.country <- trimws(data$person.country)
data$person.country <- gsub("us", "usa", data$person.country)
data$person.country <- gsub("usaa", "usa", data$person.country)
data$person.country <- gsub("united states", "usa", data$person.country)
data$person.country <- gsub("unitef states", "usa", data$person.country)
data$person.country <- gsub("uunited states", "usa", data$person.country)
data$person.country <- gsub("uusa", "usa", data$person.country)
data$person.country <- gsub("u.s", "usa", data$person.country)
data$person.country <- gsub("unites states", "usa", data$person.country)
data$person.country <- gsub("united kingdom", "uk", data$person.country)
data$person.country <- gsub("engladn", "uk", data$person.country)
data$person.country <- gsub("england", "uk", data$person.country)
data$person.country <- gsub("wales", "uk", data$person.country)
data$person.country <- gsub("ausatralia", "australia", data$person.country)
data$person.country <- gsub("ausatralia ", "australia", data$person.country)
data$person.country <- gsub("rusasia", "russia", data$person.country)
data$person.country <- gsub("polish", "poland", data$person.country)
data$person.country <- gsub("cyprusa", "cyprus", data$person.country)
data$person.country <- gsub("ausatria", "austria", data$person.country)
data$person.country <- gsub("soutu africa", "south africa", data$person.country)

## Leaflet preparing data
countries <- subset(joinCountryData2Map(data,
                                                 joinCode = "NAME",
                                                 nameJoinColumn = "person.country", verbose = FALSE), 
                            !is.na(person.gender))
166 codes from your data successfully matched countries in the map
1 codes from your data failed to match with a country code in the map
203 codes from the map weren't represented in your data
num_country <- data %>%
  group_by(person.country) %>%
  summarise(n=n()) 
num_country <- num_country[-41,]
num_country <- num_country[order(match(num_country$person.country, countries$person.country)), ]
factpal <- colorFactor(brewer.pal(n = 11, name ="Spectral") , countries$person.country)
labels <- paste0("<strong>", toupper(countries$person.country), "</strong><br/>", 
                 format(num_country$n, digits = 0, big.mark = ".", decimal.mark = ",", scientific = FALSE),
                 " Ispitanika") %>% lapply(htmltools::HTML)

## Leaflet plot
leaflet(countries) %>%
  addTiles() %>%  
  addPolygons(
    fillColor = ~factpal(person.country),
    stroke = FALSE,
    label = labels,
    labelOptions = labelOptions(
      style = list("font-weight" = "normal", padding = "3px 8px"),
      textsize = "15px",
      direction = "auto")
  ) %>%
  setView(25,20,2)

Segmentacija uz pomoć K-means

Za segmentaciju smo se odlučili koristiti K-means algoritam. Više o algoritmu možete pročitati na sljedećoj poveznici. Iako za određivanje broja klastera K nismo vidjeli elbow u grafu ovisnosti ukupnog unutar-klastera zbroja kvadrata J o broju klastera K, odlučili smo se za 4 klastera. Razlog tome je što jedino između 4 i 5 klastera vidimo nekakav pad u zbroju kvadrata, iako nije značajan. U ovom slučaju broj klastera se može mijenjati s obzirom na zahtjeve analize.

Za vizualizaciju podataka proveli smo PCA na podatcima. Na grafu smo bojama označili klastere te vidimo kako su se odvojili klasteri. Unatoč svemu, postoji nekoliko uzoraka gdje je došlo do preklapanja klastera, što je i očekivano jer nema očitog odvajanja klasera broja klastera.

## Cleaning the data
data.pca <- data[,c(2:38)]
data.pca <- data.pca[complete.cases(data.pca),c(-3,-5, -28, -21)]
data.pca$person.gender <- as.integer(factor(data.pca$person.gender, 
                                            levels=c("Male", "Female"), ordered = TRUE))
data.pca$person.age <- as.integer(factor(data.pca$person.age, 
                                         levels=c("<20", "20-29", "30-39", "40-49", "50-59", ">60"), ordered = TRUE))
data.pca$person.residency <- as.integer(factor(data.pca$person.residency, 
                                               levels=c("Rural area", "Small town", "Big city"), ordered = TRUE))
data.pca$person.education <- as.integer(factor(data.pca$person.education, 
                                               levels=c("No schooling completed", "Nursery school to 8th grade",
                                                        "High school graduate", "Bachelor's degree or eqvivalent",
                                                        "Master's degree or eqvivalent", "Doctorate degree"), ordered = TRUE))
data.pca$person.income <- as.integer(factor(data.pca$person.income, 
                                            levels=c("<$500", "$500-$799", "$800-$1000", "$1000-$1499", 
                                                     "$1500-$3000", ">$3000"), ordered = TRUE))
data.pca$person.ethnicity <- as.integer(factor(data.pca$person.ethnicity))
data.pca$person.marital <- as.integer(factor(data.pca$person.marital))
data.pca$person.children <- as.integer(factor(data.pca$person.children, 
                                              levels=c("0", "1", "2", "3+"), ordered = TRUE))
data.pca$skincare.spend <- as.integer(factor(data.pca$skincare.spend, 
                                             levels=c("<$10", "$10-$19", "$20-$49", "$50-$99", "$100-$199", ">$200"), ordered = TRUE))
data.pca <- data.frame(scale(data.pca))

## PCA and Kmeans
e <- NULL
for (i in 1:30) e[i] <- kmeans(data.pca, i)$tot.withinss

plot_ly(data.frame(J=e, diff=c(Inf,round(diff(e),2)), num_clusters=seq(1:30)), x = ~num_clusters,
        y = ~J, text = ~diff) %>%
  add_markers() %>%
  add_text(textfont = list(family = "Arial", 
                           size = 12, 
                           color = "grey"), 
           textposition = "top right") %>%
  layout(title = "Within error vs. broj klastera",
         xaxis = list(title = "Broj klastera K", zeroline = TRUE),
         yaxis = list(title = "J", zeroline=TRUE), 
         showlegend = FALSE)
## Segmenting and plotting clusters
PCA <- predict(preProcess(data.pca, method="pca"), data.pca)
set.seed(9874)
Kmeans <- kmeans(data.pca,4)
ggplot(data.frame(PC1=PCA$PC1, PC2=PCA$PC2, cluster=factor(Kmeans$cluster)), aes(x=PC1, y=PC2, color=cluster)) +
  geom_point(size=2)

Svojstva klastera

Prvi klaster su mladi, većinom studenti. Njihovi prihodi su mali te nisu oženjeni i nemaju djecu. Mnogo vremena provode online i na mobitelu, ali rijetko kupuju online, iako mnogo vremena istražuju proizvode online, nakon čega ih kupuju u fizičkoj trgovini. Iako nisu previše aktivni, trude se ostati u trendu i počinju brinuti za zdravlje svoje kože. Prilikom kupnje najviše cijene mišljenja i preporuke stručnjaka i prijatelja, te su im ipak sastav i kvaliteta nešto važniji od same cijene za razliku od drugih klastera. S obzirom na financijske mogućnosti, puno im je važnija usluga koju brend pruža (npr. mogućnost vraćanja i besplatni uzorci), nego li društvena slika brenda. Podjednako se odlučuju za sve vrste proizvoda, ali zasad ipak ne koriste često Kiehl’s. Ovaj klaster smo nazvali Rookies.

Drugi klaster ima nešto više muškaraca te se radi o ljudima u srednjim 20-tima, osrednjih primanja, slobodnih i bez djece. Oni dosta svojeg vremena provode online, ali ne za kupovinu. U rijetkim prigodama kada kupuju online, kupuju više proizvoda koji su im potrebni, ali ipak preferiraju pregledati proizvod online te ga potom kupiti u fizičkoj trgovini. Oni nisu društveno aktivni, ne izlaze, ne bave se sportom, nisu u trendu, te shodno tome ne brinu previše za zdravlje kože. Oni koji koriste skincare proizvode, odlučuju se za najjeftinije, mass proizvode, te im nisu važni niti sastav i kvaliteta proizvoda, niti brend, tj. slika brenda. Ne informiraju se prije kupnje skincare proizvoda te ih ne zanimaju kvaliteta usluge i pogodnosti koje brend pruža. Shodno svemu navedenom, oni ne koriste Kiehl’s i slične proizvode, niti ne planiraju. Ovaj klaster smo nazvali Passivists.

Treći klaster predstavlja pretežno žene starije od 35 godina. One su visoko obrazovane te imaju visoka primanja. U privatnom životu nisu previše aktivne, već se radi o obiteljskim ženama, majkama, kojima je obitelj na prvom mjestu. Iako ne provode mnogo vremena online, one često kupuju online putem webstranica. Prije nego li kupe online proizvod, vole ga pregledati u fizičkoj trgovini. One brinu za svoju kožu i koriste primarno premium skincare proizvode, koje još uvijek više kupuju offline. Prije kupnje skincare proizvoda žele biti dobro informirane, te traže preporuke i mišljenja stručnjaka. Kod samog proizvoda najvažnija im je kvaliteta, dok im sastav, cijena i brend nisu previše bitni. Za izbor brenda nije im bitna slika brenda, već pogodnosti koje dobivaju u vidu besplatnih uzoraka i/ili mogućnosti vraćanja proizvoda. Za sada ova grupa ne koristi mnogo Kiehl’s proizvoda. Ovaj klaster smo nazvali Veterans.

Četvrti klaster su većinom mlade žene, u srednjim 20-tim godinama. Ova skupina živi u velikim gradovima, visoko su obrazovani te imaju nešto veća primanja. Jako su aktivni. Puno vremena provode online i na mobitelu, često kupuju online (uključujući skincare proizvode) te koriste sve dostupne servise za kupnju. Puno vremena provode u druženju s prijateljima, na društvenim mrežama i sudjelujući u raznim aktivnostima. Oni su u trendu i brinu za svoje zdravlje te često koriste skincare proizvode. Kod skincare proizvoda najvažniji su im kvaliteta i prirodni sastav te često biraju premium proizvode. Prilikom kupovine žele biti informirani te informacije, preporuke i mišljenja traže na svim dostupnim mjestima. Kako su oni društveno odgovorni, tako im je i bitno koliko je brend društveno odgovoran. Od proizvoda, oni često biraju upravo Kiehl’s te se vrlo lako poistovjećuju s brendom. Ovaj klaster smo nazvali Addicts.

## Cleaning the data
data.pca1 <- data[,c(2:40,50:55)]
data.pca1 <- data.pca1[complete.cases(data[,c(2:38)]),c(-3,-5, -8, -9, -28)]
data.pca1$person.gender <- as.integer(factor(data.pca1$person.gender, 
                                            levels=c("Male", "Female"), ordered = TRUE))
data.pca1$person.age <- as.integer(factor(data.pca1$person.age, 
                                         levels=c("<20", "20-29", "30-39", "40-49", "50-59", ">60"), ordered = TRUE))
data.pca1$person.residency <- as.integer(factor(data.pca1$person.residency, 
                                               levels=c("Rural area", "Small town", "Big city"), ordered = TRUE))
data.pca1$person.education <- as.integer(factor(data.pca1$person.education, 
                                               levels=c("No schooling completed", "Nursery school to 8th grade",
                                                        "High school graduate", "Bachelor's degree or eqvivalent",
                                                        "Master's degree or eqvivalent", "Doctorate degree"), ordered = TRUE))
data.pca1$person.income <- as.integer(factor(data.pca1$person.income, 
                                            levels=c("<$500", "$500-$799", "$800-$1000", "$1000-$1499", 
                                                     "$1500-$3000", ">$3000"), ordered = TRUE))
data.pca1$person.children <- as.integer(factor(data.pca1$person.children, 
                                              levels=c("0", "1", "2", "3+"), ordered = TRUE))
data.pca1$skincare.spend <- as.integer(factor(data.pca1$skincare.spend, 
                                             levels=c("<$10", "$10-$19", "$20-$49", "$50-$99", "$100-$199", ">$200"), ordered = TRUE))
data.pca1$behave.skincare.use <- as.integer(factor(data.pca1$behave.skincare.use, 
                                             levels=c("No", "Yes"), ordered = TRUE))
data.pca1$kiehls.use <- as.integer(factor(data.pca1$kiehls.use, 
                                             levels=c("No", "Yes"), ordered = TRUE))


data.pca1$cluster <- Kmeans$cluster

## Plotting summary of all variables per cluster
featurePlot(x=data.pca1[,1:40], y=as.factor(data.pca1[,41]), plot="box",
            scales=list(x=list(relation="free"), y=list(relation="free")), par.strip.text=list(cex=0.5),
            labels=c("Cluster", ""))

Analiza Kiehl’s klijenata

Sekciju pitanja o Kiehl’s-u smo iskoristili kako bismo bolje dobili uvid u status brenda. Od svih 167 ispitanika, samo 24 ih koristi Kiehl’s (14%). Analizirali smo koliko su ispitanici zainteresirani za Kiehl’s online trgovinu, te zainteresiranost nije velika, no čak 40 ispitanika ima nekakav afinitet za nju (24%).

## Kiehls analysis 
data.kiehls <- data[,c(39:45,55)]

## Kiehl's users plot
g_kiehls1 <- ggplot(data.kiehls %>%
                      group_by(kiehls.use) %>%
                      summarise(n=n()), aes(x=kiehls.use, y=n, fill=kiehls.use)) +
  geom_col() +
  labs(x="Koriste Kiehl's", y="Broj ispitanika") +
  theme(legend.position = "none")

## kiehl's online store users plot
g_kiehls2 <- ggplot(data.kiehls %>%
                      mutate(use.kiehls=as.factor(use.kiehls)) %>%
                      group_by(use.kiehls) %>%
                      summarise(n=n()), aes(x=use.kiehls, y=n, fill=use.kiehls)) +
  geom_col() +
  labs(x="Želja za korištenjem Kiehl's e-trgovine", y="Broj ispitanika") +
  theme(legend.position = "none")

## Plotting both plots
subplot(ggplotly(g_kiehls1), ggplotly(g_kiehls2),
        titleX=TRUE, titleY=TRUE, margin=c(0.04, 0.04, 0.04, 0.18)) %>%
  layout(annotations = list(
    list(x = 0 , y = 1.05, text = "Koliko ispitanika koristi Kiehl's", showarrow = F, xref='paper', yref='paper'),
    list(x = 0.8 , y = 1.05, text = "Koliko ispitanika želi koristiti Kiehl's e-trgovinu", showarrow = F, xref='paper', yref='paper'))
  )

Osim toga željeli smo vidjeti kakve su preferencije korisnika Kiehl’s-a. Korisnici su većinom zadovoljni s Kiehl’s-om. Kiehl’s proizvode i uslugu najčešće ocijenjuju ocijenom 7. Sa istom učestalošću preporučuju Kiehl’s prijateljima i poznanicima, što je vrlo visoko i vjerojatno temelj WOM.

## Kiehl's users summary plot
ggplotly(ggplot(data.kiehls [complete.cases(data.kiehls),c(3,4,5)] %>%
         gather(variable, value), aes(x=variable, y=value)) +
  geom_boxplot() +
  labs(x="", y="Ocijena (1-10)"))

Klijenti Kiehl’s najčešće asociraju uz kvalitetu, premium proizvode, prirodne sastojke i KCR kao stručno osoblje.

## Kiehl's associations plot
ggplotly(ggplot(data.frame(associate=unlist(strsplit(data.kiehls [complete.cases(data.kiehls),7], split = ";")))) +
  geom_bar(aes(associate, fill=associate)) +
  theme (legend.position = "none") +
  labs(y="Frekvencija", x="Asocijacija"))

Od njih 24 koji koriste Kiehl’s, 19 su žene, većinom u srednjim 20-tim godinama. Oni dolaze iz većih gradova te su završili fakultet ili još uvijek uspješno studiraju na istom. Oni imaju osrednja primanja te nisu oženjeni i nemaju djecu. Dosta vremena provode online i često kupuju online. Dosta su aktivni i društveni te brinu za zdravlje svoje kože. Trude se biti informirani o skincare proizvodu kojeg kupuju, te uz to traže preporuke i mišljena prije kupnje. Na skincare proizvode najčešće troše oko $20-$49. Kod proizvoda najvažnija im je kvaliteta, ali i usluga koju Kiehl’s pruža u vidu besplatnih uzoraka i mogućnosti vraćanja proizvoda ukoliko nisu zadovoljni. Iako često kupuju online, još uvijek više vole razgledati online i kupiti u fizičkoj trgovini. Spremni su i žele koristiti Kiehl’s online trgovinu za kupnju skincare proizvoda.

## Kiehl's users summary
data [,c(-1, -29)] %>%
  filter(kiehls.use=="Yes") %>%
  mutate_if(is.character, as.factor) %>%
  summary
 person.gender person.age  person.country   person.residency
 Female:19     <20  : 6   usa     :8      Big city  :15     
 Male  : 5     20-29:14   uk      :5      Rural area: 3     
               30-39: 2   canada  :2      Small town: 6     
               40-49: 2   germany :2                        
                          barbados:1                        
                          china   :1                        
                          (Other) :5                        
                person.profession                        person.education
 student                 : 5      Bachelor's degree or eqvivalent:15     
 Student                 : 5      High school graduate           : 6     
 Administrative Assistant: 1      Master's degree or eqvivalent  : 2     
 Computer Technician     : 1      Nursery school to 8th grade    : 1     
 Firefighter             : 1                                             
 High school student     : 1                                             
 (Other)                 :10                                             
     person.income           person.ethnicity
 $1000-$1499:6     Asian / Pacific   : 5     
 $1500-$3000:1     Black or African  : 2     
 $500-$799  :5     Hispanic or Latino: 1     
 $800-$1000 :1     Other             : 2     
 <$500      :9     White             :14     
 >$3000     :2                               
                                             
                         person.marital person.children behave.time.online
 Married or domestic partnership: 2     0:23            Min.   : 2.000    
 Separated / Divorced           : 1     1: 1            1st Qu.: 5.000    
 Single, never married          :21                     Median : 7.000    
                                                        Mean   : 6.708    
                                                        3rd Qu.: 8.000    
                                                        Max.   :10.000    
                                                                          
 behave.online.buy behave.phone.buy behave.phone.use behave.sociality
 Min.   : 2.00     Min.   : 1.000   Min.   : 2.00    Min.   : 2.000  
 1st Qu.: 5.00     1st Qu.: 4.000   1st Qu.: 8.00    1st Qu.: 4.750  
 Median : 7.00     Median : 7.000   Median : 8.50    Median : 7.500  
 Mean   : 6.25     Mean   : 5.958   Mean   : 8.25    Mean   : 6.875  
 3rd Qu.: 7.25     3rd Qu.: 8.000   3rd Qu.:10.00    3rd Qu.: 8.250  
 Max.   :10.00     Max.   :10.000   Max.   :10.00    Max.   :10.000  
                                                                     
 behave.social.nets behave.sporty    behave.environment behave.trendy   
 Min.   : 3.000     Min.   : 1.000   Min.   : 5.000     Min.   : 3.000  
 1st Qu.: 6.000     1st Qu.: 4.000   1st Qu.: 7.000     1st Qu.: 6.750  
 Median : 8.000     Median : 6.000   Median :10.000     Median : 7.000  
 Mean   : 7.542     Mean   : 6.208   Mean   : 8.625     Mean   : 7.375  
 3rd Qu.: 9.000     3rd Qu.: 8.250   3rd Qu.:10.000     3rd Qu.: 9.000  
 Max.   :10.000     Max.   :10.000   Max.   :10.000     Max.   :10.000  
                                                                        
 behave.skincare.care behave.skincare.use behave.inform.buy
 Min.   : 6.000       Yes:24              Min.   : 4.000   
 1st Qu.: 8.750                           1st Qu.: 7.000   
 Median :10.000                           Median : 9.000   
 Mean   : 8.958                           Mean   : 8.167   
 3rd Qu.:10.000                           3rd Qu.:10.000   
 Max.   :10.000                           Max.   :10.000   
                                                           
 behave.expert.recommendations behave.friend.recommendations
 Min.   : 3.000                Min.   : 2.00                
 1st Qu.: 6.000                1st Qu.: 6.75                
 Median : 8.000                Median : 8.00                
 Mean   : 7.667                Mean   : 7.50                
 3rd Qu.: 9.000                3rd Qu.: 9.00                
 Max.   :10.000                Max.   :10.00                
                                                            
 behave.celebrity.recommendation behave.where.buy   skincare.spend
 Min.   : 1.00                   Min.   : 1.00    $10-$19  : 4    
 1st Qu.: 1.75                   1st Qu.: 4.75    $100-$199: 1    
 Median : 4.50                   Median : 6.00    $20-$49  :14    
 Mean   : 4.75                   Mean   : 6.00    $50-$99  : 3    
 3rd Qu.: 7.25                   3rd Qu.: 8.00    <$10     : 1    
 Max.   :10.00                   Max.   :10.00    >$200    : 1    
                                                                  
 skincare.natural skincare.price skincare.quality skincare.mass.premium
 Min.   : 3.000   Min.   : 1.0   Min.   : 6.000   Min.   : 4.000       
 1st Qu.: 6.000   1st Qu.: 6.0   1st Qu.: 8.000   1st Qu.: 5.750       
 Median : 7.500   Median : 8.0   Median :10.000   Median : 6.000       
 Mean   : 7.042   Mean   : 7.5   Mean   : 9.208   Mean   : 6.583       
 3rd Qu.: 8.000   3rd Qu.:10.0   3rd Qu.:10.000   3rd Qu.: 8.000       
 Max.   :10.000   Max.   :10.0   Max.   :10.000   Max.   :10.000       
                                                                       
 skincare.social.image skincare.service skincare.free.samples
 Min.   : 1.000        Min.   : 1.000   Min.   : 1.000       
 1st Qu.: 4.750        1st Qu.: 3.000   1st Qu.: 4.750       
 Median : 6.000        Median : 6.000   Median : 7.000       
 Mean   : 5.792        Mean   : 5.348   Mean   : 6.417       
 3rd Qu.: 8.000        3rd Qu.: 7.000   3rd Qu.: 9.000       
 Max.   :10.000        Max.   :10.000   Max.   :10.000       
                       NA's   :1                             
 skincare.returns skincare.environment.buy  kiehls.know     kiehls.use
 Min.   : 1.000   Min.   : 2.00            Min.   : 6.000   Yes:24    
 1st Qu.: 5.000   1st Qu.: 7.00            1st Qu.: 7.000             
 Median : 7.000   Median : 8.00            Median : 9.000             
 Mean   : 6.957   Mean   : 7.75            Mean   : 8.458             
 3rd Qu.:10.000   3rd Qu.: 9.00            3rd Qu.:10.000             
 Max.   :10.000   Max.   :10.00            Max.   :10.000             
 NA's   :1                                                            
 kiehls.satisfaction kiehls.service   kiehls.recommend
 Min.   : 4.000      Min.   : 3.000   Min.   : 1.000  
 1st Qu.: 7.000      1st Qu.: 5.500   1st Qu.: 6.000  
 Median : 8.000      Median : 8.000   Median : 8.000  
 Mean   : 7.708      Mean   : 7.261   Mean   : 7.375  
 3rd Qu.: 9.000      3rd Qu.: 9.500   3rd Qu.:10.000  
 Max.   :10.000      Max.   :10.000   Max.   :10.000  
                     NA's   :1                        
                            kiehls.product
                                   : 4    
 Ultra Facial Cream                : 2    
 Avocado Eye Cream                 : 1    
 Creamy under eye avocado treatment: 1    
 eyeliner                          : 1    
 face lotion                       : 1    
 (Other)                           :14    
                                                                                 kiehls.associate
 Quality                                                                                 : 5     
 Natural products;Premium products;Quality                                               : 3     
 Kiehl's Customer Representatives (store experts in white lab coats)                     : 2     
 Free samples                                                                            : 1     
 Kiehl's Customer Representatives (store experts in white lab coats);Free samples;Quality: 1     
 Kiehl's Customer Representatives (store experts in white lab coats);Mr. Bones           : 1     
 (Other)                                                                                 :11     
                                                              online.service
                                                                     : 7    
 boots                                                               : 1    
 Buy enough for free shop or ship to store                           : 1    
 Douglas or any other website the product i am looking for is sold on: 1    
 Ebay                                                                : 1    
 idk                                                                 : 1    
 (Other)                                                             :12    
                                           online.why
                                                : 8  
 Access, prices and product availability.       : 1  
 because i dont have to go and physically buy it: 1  
 convenience                                    : 1  
 Convenience & samples                          : 1  
 Convenient and easy to find products           : 1  
 (Other)                                        :11  
                                                                      online.favorite
                                                                              : 8    
 ? didn't i just answer that?                                                 : 1    
 Able to read reviews about products, fast shipping and good customer service.: 1    
 Ease of use, selection                                                       : 1    
 efficency                                                                    : 1    
 Free samples, reward points                                                  : 1    
 (Other)                                                                      :11    
 online.satisfaction online.frequency online.quantity   online.time    
 Min.   : 6.000      Min.   : 4.000   Min.   : 1.000   Min.   : 1.000  
 1st Qu.: 7.000      1st Qu.: 6.000   1st Qu.: 1.250   1st Qu.: 6.000  
 Median : 8.000      Median : 7.000   Median : 3.500   Median : 6.000  
 Mean   : 8.353      Mean   : 7.389   Mean   : 3.667   Mean   : 6.722  
 3rd Qu.:10.000      3rd Qu.:10.000   3rd Qu.: 5.750   3rd Qu.: 9.500  
 Max.   :10.000      Max.   :10.000   Max.   :10.000   Max.   :10.000  
 NA's   :7           NA's   :6        NA's   :6        NA's   :6       
  online.items    showroom.webroom   use.kiehls    
 Min.   : 1.000   Min.   : 1.000   Min.   : 2.000  
 1st Qu.: 2.000   1st Qu.: 5.000   1st Qu.: 5.750  
 Median : 3.500   Median : 6.000   Median : 7.500  
 Mean   : 4.111   Mean   : 6.056   Mean   : 6.917  
 3rd Qu.: 5.000   3rd Qu.: 7.000   3rd Qu.: 8.250  
 Max.   :10.000   Max.   :10.000   Max.   :10.000  
 NA's   :6        NA's   :6                        

Zaključci